/**
 * 隐藏字符串中间的字符，使用星号替换。
 *
 * @param str 要处理的字符串。
 * @param frontChars 字符串前面显示的字符数。
 * @param endChars 字符串末尾显示的字符数。
 * @param starCount 要插入的星号数量。
 * @returns 处理后的字符串。
 */
export const hideStringMiddle = (str, frontChars, endChars, starCount) => {
    if (!str) {
        return ""
    }
    // 检查输入是否有效
    if (typeof str !== 'string' || frontChars < 0 || endChars < 0 || starCount < 0) {
        return '参数错误';
    }

    let front = '';
    let end = '';
    let middleStars = '';

    // 确保 frontChars 和 endChars 不会超出字符串长度
    if (str.length > frontChars) {
        front = str.substring(0, frontChars);
    } else {
        front = str;
    }

    if (str.length > frontChars + endChars) {
        end = str.substring(str.length - endChars);
    }

    // 中间的星号数量根据剩余字符串长度来决定
    const remainingLength = str.length - front.length - end.length;
    middleStars = '*'.repeat(Math.min(remainingLength, starCount));

    // 如果字符串太短，无法填充足够的星号，则减少星号数量以保持字符串总长不变
    if (front.length + middleStars.length + end.length > str.length) {
        middleStars = '*'.repeat(str.length - front.length - end.length);
    }

    // 拼接并返回结果
    return front + middleStars + end;
}